package advanced.io;

import java.io.File;

/**
 * 相对路径和绝对路径  重点!!!!!
 * <p>
 * 1. 路径 存在盘符:绝对路径
 * 2. 没有盘符:相对路径
 */
public class L_Path {
    public static void main(String[] args) {
        String path = "C:\\Users\\DMLYS\\Documents\\prepare_for_work\\pfw\\java_l\\src/main/java/primary/io/init";
        File init = new File(path);
        for (String s : init.getParentFile().list()) {//列出下级名称
            System.out.println(s);

        }
        for (File file : init.getParentFile().listFiles()) {
            System.out.println(file.getPath());//列出下级File对象
        }
        //绝对路径
        File src = new File(path);
        System.out.println("绝对路劲:" + src.getAbsolutePath());
        //相对路径
        System.out.println("工程路径" + System.getProperty("user.dir"));//工程路径
        src = new File("src/main/java/primary/io/init");
        System.out.println("相对路径:" + src.getAbsolutePath());

        File ndir = new File(init.getParent(), "/dir");
        ndir.mkdir();//创建目录  确保上级目录存在,不存在则会创建失败
        ndir.mkdirs();//上级目录可以不存在, 不存在则会统一创建
        ndir.deleteOnExit();//删除文件或者文件夹
        System.out.println("-------遍历文件结构-------");
        iterDir(init.getParentFile().getParentFile());
        System.out.println("-------遍历文件夹大小=---------");
        System.out.println("文件夹大小: " + countFileSize(init.getParentFile().getParentFile()));

    }

    public static void iterDir(File dir) {
        iterDir(dir, 0);
    }

    /**
     * 递归遍历文件结构
     *
     * @param dir
     */
    private static void iterDir(File dir, int deep) {
        for (int i = 0; i < deep; i++) {
            System.out.print("-"); //控制层次感
        }
        System.out.println(dir.getName());//打印文件名
        if (dir == null || !dir.exists()) return;
        else {
            if (dir.isDirectory()) {//如果是路径,递归打印
                for (File src : dir.listFiles()) {
                    iterDir(src, deep + 1);
                }
            }
            return;
        }
    }

    public static int countFileSize(File dir) {
        int fillSize = 0;
        if (dir != null && dir.exists()) {
            if (dir.isFile()) {
                fillSize += dir.length();
                return fillSize;
            } else {
                for (File src : dir.listFiles()) {
                    fillSize += countFileSize(src);
                }
                return fillSize;
            }

        } else return fillSize;
    }
}
